import {getTags} from "@/services/tags";

export default {
    //调用model的时候, 通过命名空间调用, 不要和其他的model同名
    namespace: "tags",

    //状态, 跟react中的state类似, 和redux中保存的state一样
    state: {
        tagsList: []
    },

    //调用服务端接口, 获取数据
    effects: {
        /**
         * @param payload   当ui组件调用方法时,传入的参数
         * @param callback  回调函数
         * @param put   通过put可以传递参数给reducers
         * @param call  可以让我们访问外部的一些方法
         *
         *  其他:
         *      1.如果直接使用call调用外部方法,外部方法发送了异步请求,通过方法的*号和yield关键字可以将方法变成同步的
         */
        * fetchTags({payload, callback}, {put, call}) {

            //获取tags数据, 同步获取数据
            const response = yield call(getTags)

            // 调用reducers, 并传递数据
            yield put({
                type: 'setTagsList',   //类似于redux中action的type
                payload: response
            })
        }
    },

    //更新state
    reducers: {
        /**
         * @param state
         * @param action    action.payload就是effect中put方法传入的payload
         */
        setTagsList(state, action) {
            return {...state, tagsList: action.payload}
        }
    },
}
